package com.example.mybatisplusdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.mybatisplusdemo.model.domain.Store;
import com.example.mybatisplusdemo.model.dto.LocationDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author lxp
 * @since 2025-07-04
 */
public interface StoreMapper extends BaseMapper<Store> {

    List<Store> getStoresByCategory(@Param("category") String category);

    Long getFavoriteCountById(@Param("id") Long id);

    Long getReviewCountById(@Param("id") Long id);

    Double getAvgScoreById(@Param("id") Long id);

    Store selectStoreById(@Param("id") Long id);

    List<Store> getStoreListByMerchantId(@Param("merchantId") Long merchantId);

    List<Store> selectTop20FiveStarStores();

    List<Store> selectTop20ReviewStores();

    List<Store> selectTop20FavoriteStores();

    List<Store> selectTop10AvgScoreStores();

    Page<Store> getPendingStores(Page<Store> page);

    Long getFiveStarCountById(@Param("id") Long id);

    boolean approveStore(@Param("storeId") Long storeId);

    LocationDTO getStoreLocationById(@Param("storeId") Long storeId);

    Double calculateDistance(@Param("lon1") Double lon1, @Param("lat1") Double lat1, @Param("lon2") Double lon2, @Param("lat2") Double lat2);

    boolean closeStoreById(@Param("id") Long id);

    boolean rejectStore(@Param("storeId") Long storeId);
}
